home *** CD-ROM | disk | FTP | other *** search
/ Aminet 34 / Aminet 34 (2000)(Schatztruhe)[!][Dec 1999].iso / Aminet / util / gnu / unixcmds.lha / unixcmds / src / shar.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-06  |  2.1 KB  |  75 lines

  1.  
  2. /* shar - make a shell archive          Author: Michiel Husijes */
  3.  
  4. #include <stdlib.h>             /* for the nonstd :-( _PROTOTYPE */
  5. #include <stdio.h>
  6.  
  7. static void error(char *progname, char *operation,
  8.                            char *filename);
  9.  
  10. int main(argc, argv)
  11. /* [<][>][^][v][top][bottom][index][help] */
  12. int argc;
  13. char *argv[];
  14. {
  15.   int argn;
  16.   register int ch;
  17.   register FILE *fp;
  18.   int exitstatus;
  19.   char *filename;
  20.  
  21.   exitstatus = 0;
  22.   for (argn = 1; argn < argc; argn++) {
  23.         filename = argv[argn];
  24.         if ((fp = fopen(filename, "r")) == NULL) {
  25.                 error(argv[0], "opening ", filename);
  26.                 exitstatus = 1;
  27.         } else {
  28.                 fputs("echo x - ", stdout);
  29.                 fputs(filename, stdout);
  30.                 fputs("\nsed '/^X/s///' > ", stdout);
  31.                 fputs(filename, stdout);
  32.                 fputs(" << '/'\n", stdout);
  33.                 while ((ch = getc(fp)) != EOF) {
  34.                         putchar('X');
  35.                         putchar(ch);
  36.                         while (ch != '\n') {
  37.                                 ch = getc(fp);
  38.                                 if (ch == EOF) break;
  39.                                 putchar(ch);
  40.                         }
  41.                         if (ch == EOF) break;
  42.                 }
  43.                 fputs("/\n", stdout);
  44.                 if (ferror(fp)) {
  45.                         error(argv[0], "reading ", filename);
  46.                         exitstatus = 1;
  47.                 }
  48.                 if (fclose(fp) != 0) {
  49.                         error(argv[0], "closing ", filename);
  50.                         exitstatus = 1;
  51.                 }
  52.                 if (ferror(stdout)) break;      /* lost already */
  53.         }
  54.   }
  55.   fflush(stdout);
  56.   if (ferror(stdout)) {
  57.         error(argv[0], "writing ", "stdout");
  58.         exitstatus = 1;
  59.   }
  60.   return(exitstatus);
  61. }
  62.  
  63. static void error(progname, operation, filename)
  64. /* [<][>][^][v][top][bottom][index][help] */
  65. char *progname;
  66. char *operation;
  67. char *filename;
  68. {
  69.   fputs(progname, stderr);
  70.   fputs(": error ", stderr);
  71.   fputs(operation, stderr);
  72.   perror(filename);
  73. }
  74. /* [<][>][^][v][top][bottom][index][help] */
  75.